/*
 * @lc app=leetcode.cn id=714 lang=golang
 *
 * [714] 买卖股票的最佳时机含手续费
 */

// @lc code=start
func maxProfit(prices []int, fee int) int {
	if len(prices) == 1 {
		return 0
	}
	dp := make([][2]int, len(prices))
	dp[0][1] = -prices[0] - fee // 持有股票
	for i := 1; i < len(prices); i++ {
		dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])     // 今天结束未持有股票，要么前一天未持有，要么今天卖了
		dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i]-fee) // 今天结束持有股票， 要么前一天就持有，要么今天买的
	}

	return dp[len(prices)-1][0]
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

// @lc code=end

